package com.xczl.demo.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;

import com.xczl.demo.dao.GoodsCateDao;
import com.xczl.demo.dao.GoodsDao;
import com.xczl.demo.domain.Goods;
import com.xczl.demo.domain.GoodsCate;
import com.xczl.demo.domain.filter.GoodsFilter;

@Service
@Transactional
public class GoodsService {

	@Autowired
	private GoodsDao goodsDao;

	@Autowired
	private GoodsCateDao goodsCateDao;

	/**
	 * 添加商品
	 * 
	 * @param entity
	 */
	public void add(Goods entity) {
		Assert.notNull(entity);// 实体必须存在
		Assert.hasText(entity.getName());// 名称
		Assert.notNull(entity.getPrice());// 价格必须存在
		Assert.notNull(entity.getState());// 状态
		Assert.hasText(entity.getPicUrl());// 图片
		Assert.notNull(entity.getCateId());// 分类
		GoodsCate cate = goodsCateDao.findById(entity.getCateId());// 查询分类
		Assert.notNull(cate);// 分类
		goodsDao.insertGoods(entity);
	}

	/**
	 * 更新商品
	 * 
	 * @param entity
	 */
	public void update(Goods entity) {
		// 验证提交信息
		Assert.notNull(entity, "请填写商品实体");// 实体必须存在
		Assert.notNull(entity.getGoodsId(), "商品ID不存在");// 名称
		Assert.hasText(entity.getName(), "请填写商品名称");// 名称
		Assert.notNull(entity.getPrice(), "请填写商品价格");// 价格必须存在
		Assert.notNull(entity.getState(), "请选择商品状态");// 状态
		Assert.hasText(entity.getPicUrl(), "请上传商品图片");// 图片
		Assert.notNull(entity.getCateId(), "分类不存在");// 分类

		// 获取商品分类
		GoodsCate cate = goodsCateDao.findById(entity.getCateId());// 查询分类
		Assert.notNull(cate, "分类不存在");// 分类
		// 查询当前商品状态
		Goods temp = goodsDao.findById(entity.getGoodsId());// 查询商品
		Assert.notNull(temp);// 商品必须存在
		Assert.isTrue(Goods.STATE_Off == temp.getState(), "请将商品下架");
		goodsDao.updateGoods(entity);
	}

	/**
	 * 商品上下架
	 * 
	 * @param state
	 * @param id
	 */
	public void updateState(int state, int id) {
		goodsDao.updateState(state, id);
	}

	/**
	 * 查询商品
	 * 
	 * @param id
	 * @return
	 */
	public Goods findById(int id) {
		return goodsDao.findById(id);
	}

	/**
	 * 根据条件查询
	 */
	public List<Goods> findByCondition(GoodsFilter filter) {
		return goodsDao.findByCondition(filter);
	}
}
